/**
 * 连接websocket工具类
 * @author lian
 */
export class WebSocketUtil {
  static socketTask?: UniApp.SocketTask
  constructor() {

  }

  /**
   * 初始化socket
   * @param url socket 路径 ws://127.0.0.1:8080/ws/{sid}
   */
  static initSocket(url: string): Promise<WebSocketUtil | any> {
    return new Promise((resolve, reject) => {
      // 连接 socket
      this.socketTask = uni.connectSocket({
        url,
        success: (success) => {
          console.log('连接成功:', success)
          resolve(this)
        },
        fail: (fail) => {
          console.log('连接失败:', fail)
          reject(fail)
        },
      })

      // 监听 WebSocket 连接打开事件
      this.socketTask.onOpen((res) => {
        console.log('连接打开:', res)
      })

      // 监听 WebSocket 连接关闭事件
      this.socketTask.onClose((res) => {
        console.log('连接关闭:', res)
      })

      // 监听 WebSocket 错误事件
      this.socketTask.onError((err) => {
        console.log('连接错误:', err)
      })

      // 监听 WebSocket 接收到服务器的消息事件
      this.socketTask.onMessage((res) => {
        showSimpleToast(res.data, 3000)
        console.log('接收到服务器的消息:', res)
      })
    })
  }

  /**
   * 发送消息
   * @param message 消息内容
   */
  static sendMessage(message: any) {
    this.socketTask?.send({
      data: message,
      success: (result) => {
        console.log('发送成功:', result)
      },
      fail: (result) => {
        console.log('发送失败:', result)
      },
    })
  }

  /**
   * 关闭socket 连接
   */
  static close() {
    this.socketTask?.close({
      reason: '客户端请求关闭',
      success(result) {
        console.log('socket 已关闭:', result)
      },
      fail: (fail) => {
        console.log('socket 关闭失败:', fail)
      },
    })
  }
}
